﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraBars;
using Control;
using DTO;

namespace QuanLyThuVien
{
    public partial class GUI : DevExpress.XtraBars.Ribbon.RibbonForm
    {
        public GUI()
        {
            InitializeComponent();

            //Config login
            session.tenTaiKhoan = "";
            session.matKhau = "";
            session.maNhanVien = 0;
            session.tenNhanVien = "";
            session.maBoPhan = 0;
            session.trangThai = false;
            //hide ribbon Page
            ribbonPage_HideAll();
        }

        private void GUI_Load(object sender, EventArgs e)
        {
            //chọn page đầu tiên mặc định là page 0
            ribbon.SelectedPage = ribbon.Pages[0];
            ribbon_SelectedPageChanged(null, null);
        }

        //hide tất cả ribbonPage
        private void ribbonPage_HideAll()
        {
            rbpBaoCaoThongKe.Visible = false;
            rbpQuanLy.Visible = false;
            rbpThuKho.Visible = false;
            rbpThuQuy.Visible = false;
            rbpThuThu.Visible = false;
        }
        
        //Show ribbon
        private void ribbonPage_ShowAll()
        {
            rbpBaoCaoThongKe.Visible = true;
            rbpQuanLy.Visible = true;
            rbpThuKho.Visible = true;
            rbpThuQuy.Visible = true;
            rbpThuThu.Visible = true;
        }

        private void ribbonPage_Show_Quanly()
        {
            rbpBaoCaoThongKe.Visible = true;
            rbpQuanLy.Visible = true;
        }

        private void ribbonPage_Show_ThuKho()
        {
            rbpBaoCaoThongKe.Visible = true;
            rbpThuKho.Visible = true;
        }

        private void ribbonPage_Show_ThuQuy()
        {
            rbpBaoCaoThongKe.Visible = true;
            rbpThuQuy.Visible = true;
        }

        private void ribbonPage_Show_ThuThu()
        {
            rbpBaoCaoThongKe.Visible = true;
            rbpThuThu.Visible = true;
        }

        //Tùy theo từng loại nhân viên sẽ hiển thị nhưng phần được phép
        private void ribbonPage_Show()
        {
            switch (session.maBoPhan)
            {
                case 1: { ribbonPage_Show_ThuThu(); break; }
                case 2: { ribbonPage_Show_ThuKho(); break; }
                case 3: { ribbonPage_Show_ThuQuy(); break; }
                case 4: { ribbonPage_Show_Quanly(); break; }
                default: break;
            }
        }

        private void btnDangNhap_ItemClick(object sender, ItemClickEventArgs e)
        {
            //nếu chưa đăng nhập
            if (session.trangThai == false)
            {
                frmDangNhap frm = new frmDangNhap();
                if (frm.ShowDialog() == DialogResult.OK)
                {
                    session.trangThai = true;
                    ribbonPage_Show();
                    btnDangNhap.Caption = "Đăng xuất";
                }
            }
            //ngược lại
            else
            {
                //ghi nhận lại là chưa đăng nhập
                session.trangThai = false;
                //ẩn hết các ribbonPage
                ribbonPage_HideAll();
                //đóng hết các tabpage đã mở
                while (tabControlChinh.TabPages.Count > 1)
                {
                    tabControlChinh.TabPages.RemoveAt(tabControlChinh.TabPages.Count - 1);
                }
                btnDangNhap.Caption = "Đăng nhập";
            }
        }


        //sự kiện nhấn vào button thoát trên menu
        private void btnThoat_ItemClick(object sender, ItemClickEventArgs e)
        {
            this.Close();
        }

        //Khi form chính vừa hiển thị lên thì form đăng nhập hiển thị
        private void GUI_Shown(object sender, EventArgs e)
        {
            btnDangNhap_ItemClick(null, null);
        }

        //Đóng một tab trong tabControlChinh
        private void tabControlChinh_CloseButtonClick(object sender, EventArgs e)
        {
            DevExpress.XtraTab.XtraTabControl tabControl = (DevExpress.XtraTab.XtraTabControl) sender;
            //Lấy ra vị trí tab vừa nhấn x
            int vitri = tabControl.SelectedTabPageIndex;
            //Nếu là = 0  thì return để né bug
            if (vitri == 0) return;
            //Chọn tab là tab liền trước
            tabControl.SelectedTabPageIndex = vitri - 1;
            //Loại bỏ khỏi tab control
            tabControl.TabPages.RemoveAt(vitri);
        }

        /* Khi chọn một ribbon page thì bên dưới
         * tab control sẽ tạo một tab page tương ứng
         */
        private void ribbon_SelectedPageChanged(object sender, EventArgs e)
        {
            //Lấy ra ribbon page
            DevExpress.XtraBars.Ribbon.RibbonPage rbp = ribbon.SelectedPage;
            //Tạo tab page tương ứng với rbp
            Tao_tabPage(rbp.Text, rbp.Name, tabControlChinh,rbp.ImageIndex);
        }

        //Tạo tab page cho control
        private DevExpress.XtraTab.XtraTabPage Tao_tabPage(string text, string name, DevExpress.XtraTab.XtraTabControl tabControl,int imageindex)
        {
            //Kiểm tra xem tab page có tồn tại hay không
            int vitri = KiemTraTonTai_tabPage(name, tabControl);
            if (vitri >= 0)
            {
                //tabpage đã tồn tại nên chọn luôn
                tabControl.SelectedTabPageIndex = vitri;
                return tabControl.SelectedTabPage;
            }
            //Tạo tabPage mới vào tabControl
            DevExpress.XtraTab.XtraTabPage tabPage_new = new DevExpress.XtraTab.XtraTabPage { Text = text, Name = "tabPage" + name, Tag = name };
            tabControl.TabPages.Add(tabPage_new);
            tabControl.SelectedTabPage = tabPage_new;
            //thêm index hình để hiển thị
            tabPage_new.ImageIndex = imageindex;
            //phần return này phục vụ cho mục đích tái sử dụng hàm khi tạo tab con
            return tabPage_new;
        }

        /* Kiểm tra sự tồn tại của một tabpage trong tab control
         * nếu trả về vị trí >= 0 là có tồn tại
         * -1 là không tồn tại
         */
        private int KiemTraTonTai_tabPage(string tentabPage, DevExpress.XtraTab.XtraTabControl tabControl)
        {
            for (int i = 0; i < tabControl.TabPages.Count; i++)
                if (tentabPage == (string)tabControl.TabPages[i].Tag)
                    return i;
            return -1;
        }

        /* Chọn tab page trong tab control chính
         * thì trên ribbon sẽ chọn ribbon page tương ứng
         */
        private void tabControlChinh_SelectedPageChanged(object sender, DevExpress.XtraTab.TabPageChangedEventArgs e)
        {
            for (int i = 0; i < ribbon.Pages.Count; i++)
                if ((string)e.Page.Tag == ribbon.Pages[i].Name)
                {
                    ribbon.SelectedPage = ribbon.Pages[i];
                    return;
                }
        }

        //Tạo tab control con bên trong tabpage của tab control chính
        private DevExpress.XtraTab.XtraTabControl Tao_tabControl()
        {
            DevExpress.XtraTab.XtraTabControl tabControl = null;
            try
            {
                //Kiểm tra xem có tạo tab control chưa
                tabControl = (DevExpress.XtraTab.XtraTabControl)tabControlChinh.SelectedTabPage.Controls[0];
            }
            catch
            {
                //Tạo mới tab control bên trong tab page
                DevExpress.XtraBars.Ribbon.RibbonPage rbp = ribbon.SelectedPage;
                tabControl = new DevExpress.XtraTab.XtraTabControl { Name = "tabctrl" + rbp.Name, Tag = rbp.Name };
                tabControl.ClosePageButtonShowMode = DevExpress.XtraTab.ClosePageButtonShowMode.InActiveTabPageHeader;
                tabControl.Dock = DockStyle.Fill;
                tabControl.HeaderLocation = DevExpress.XtraTab.TabHeaderLocation.Top;
                //Thêm sự kiện closebuttonclick cho tab control
                tabControl.CloseButtonClick += new EventHandler(tabControl_CloseButtonClick);
                //thêm vào tab page
                tabControlChinh.SelectedTabPage.Controls.Add(tabControl);
                //embed thêm thư viện hình
                tabControl.Images = hinh1616;
            }
            return tabControl;
        }

        //Nhấn vào nút đóng x trong một tab control
        private void tabControl_CloseButtonClick(object sender, EventArgs e)
        {
            DevExpress.XtraTab.XtraTabControl tabControl = (DevExpress.XtraTab.XtraTabControl) sender;
            //Lấy ra vị trí tab vừa nhấn x
            int vitri = tabControl.SelectedTabPageIndex;
            ////Nếu là = 0  thì return để né bug
            //if (vitri == 0) return;
            ////Chọn tab là tab liền trước
            //tabControl.SelectedTabPageIndex = vitri - 1;
            ////Loại bỏ khỏi tab control
            //tabControl.TabPages.RemoveAt(vitri);
            tabControl.TabPages.RemoveAt(vitri);
            //Loại bỏ tabcontrol nếu bên trong không chứa tab page nào nữa
            if (tabControl.TabPages.Count == 0)
            {
                DevExpress.XtraTab.XtraTabPage parent = (DevExpress.XtraTab.XtraTabPage)tabControl.Parent;
                parent.Controls.RemoveAt(0);
                return;
            }
            tabControl.SelectedTabPageIndex = vitri - 1;
        }

        //Đưa user control vào bên trong tab page
        private void Tao_control(DevExpress.XtraTab.XtraTabPage tabPage, UserControl UsrControl)
        {
            UsrControl.Dock = DockStyle.Fill;
            //add vào tabpage
            tabPage.Controls.Add(UsrControl);
        }

        //Gom tất cả các hàm xử lý chung của sự kiện click vào barbutton
        private void btnXuLyClick(DevExpress.XtraBars.BarButtonItem btn_clicked, UserControl UsrControl)
        {
            //tạo tab control
            DevExpress.XtraTab.XtraTabControl tabControl = Tao_tabControl();
            //tạo tab page
            DevExpress.XtraTab.XtraTabPage tabPage = Tao_tabPage(btn_clicked.Caption, btn_clicked.Name, tabControl, btn_clicked.LargeImageIndex);
            //đưa user control vào tab page
            Tao_control(tabPage, UsrControl);
        }

        private void btnTraCuu_ItemClick(object sender, ItemClickEventArgs e)
        {
            btnXuLyClick((DevExpress.XtraBars.BarButtonItem)e.Item, new ctrlTraCuu());
        }

        private void btnLapTheDocGia_ItemClick(object sender, ItemClickEventArgs e)
        {
            btnXuLyClick((DevExpress.XtraBars.BarButtonItem)e.Item, new ctrlLapTheDocGia());
        }

        private void btnQuanLyDocGia_ItemClick(object sender, ItemClickEventArgs e)
        {
            btnXuLyClick((DevExpress.XtraBars.BarButtonItem)e.Item, new ctrlQuanLyDocGia());
        }

        private void btnChoMuonSach_ItemClick(object sender, ItemClickEventArgs e)
        {
            btnXuLyClick((DevExpress.XtraBars.BarButtonItem)e.Item, new ctrlChoMuonSach());
        }

        private void btnNhanTraSach_ItemClick(object sender, ItemClickEventArgs e)
        {
            btnXuLyClick((DevExpress.XtraBars.BarButtonItem)e.Item, new ctrlNhanTraSach());
        }

        private void btnGhiNhanMatSach_ItemClick(object sender, ItemClickEventArgs e)
        {
            btnXuLyClick((DevExpress.XtraBars.BarButtonItem)e.Item, new ctrlGhiNhanMatSach());
        }

        private void btnThayDoiQuyDinh_ItemClick(object sender, ItemClickEventArgs e)
        {
            btnXuLyClick((DevExpress.XtraBars.BarButtonItem)e.Item, new ctrlThayDoiQuyDinh());
        }

        private void btnLoaiDocGia_ItemClick(object sender, ItemClickEventArgs e)
        {
            btnXuLyClick((DevExpress.XtraBars.BarButtonItem)e.Item, new ctrlLoaiDocGia());
        }

        private void btnTheLoaiSach_ItemClick(object sender, ItemClickEventArgs e)
        {
            btnXuLyClick((DevExpress.XtraBars.BarButtonItem)e.Item, new ctrlTheLoaiSach());
        }

        private void btnLyDoThanhLy_ItemClick(object sender, ItemClickEventArgs e)
        {
            btnXuLyClick((DevExpress.XtraBars.BarButtonItem)e.Item, new ctrlLyDoThanhLy());
        }

        private void btnTiepNhanSachMoi_ItemClick(object sender, ItemClickEventArgs e)
        {
            btnXuLyClick((DevExpress.XtraBars.BarButtonItem)e.Item, new ctrlTiepNhanSachMoi());
        }

        private void btnThanhLySach_ItemClick(object sender, ItemClickEventArgs e)
        {
            btnXuLyClick((DevExpress.XtraBars.BarButtonItem)e.Item, new ctrlThanhLySach());
        }

        private void btnLapPhieuThuTienPhat_ItemClick(object sender, ItemClickEventArgs e)
        {
            btnXuLyClick((DevExpress.XtraBars.BarButtonItem)e.Item, new ctrlLapPhieuThuTienPhat());
        }

        private void btnTiepNhanNhanVien_ItemClick(object sender, ItemClickEventArgs e)
        {
            btnXuLyClick((DevExpress.XtraBars.BarButtonItem)e.Item, new ctrlTiepNhanNhanVien());
        }

        private void btnQuanLyNhanVien_ItemClick(object sender, ItemClickEventArgs e)
        {
            btnXuLyClick((DevExpress.XtraBars.BarButtonItem)e.Item, new ctrlQuanLyNhanVien());
        }

        private void btnChucVu_ItemClick(object sender, ItemClickEventArgs e)
        {
            btnXuLyClick((DevExpress.XtraBars.BarButtonItem)e.Item, new ctrlChucVu());
        }

        private void btnBoPhan_ItemClick(object sender, ItemClickEventArgs e)
        {
            btnXuLyClick((DevExpress.XtraBars.BarButtonItem)e.Item, new ctrlBoPhan());
        }

        private void btnBangCap_ItemClick(object sender, ItemClickEventArgs e)
        {
            btnXuLyClick((DevExpress.XtraBars.BarButtonItem)e.Item, new ctrlBangCap());
        }

        private void btnTinhHinhMuonSachTheoTheLoai_ItemClick(object sender, ItemClickEventArgs e)
        {
            btnXuLyClick((DevExpress.XtraBars.BarButtonItem)e.Item, new ctrlTinhHinhMuonSachTheoTheLoai());
        }

        private void btnSachTraTre_ItemClick(object sender, ItemClickEventArgs e)
        {
            btnXuLyClick((DevExpress.XtraBars.BarButtonItem)e.Item, new ctrlSachTraTre());
        }

        private void btnDocGiaNoTienPhat_ItemClick(object sender, ItemClickEventArgs e)
        {
            btnXuLyClick((DevExpress.XtraBars.BarButtonItem)e.Item, new ctrlDocGiaNoTienPhat());
        }
    }
}